#pragma once
#include <QGraphicsItem>
#include <QPainter>
#include <QRectF>
#include <QLineF>
#include <QVariant>

// 前向声明
class BasePort;

class Connection : public QGraphicsItem
{
public:
    explicit Connection(BasePort* startPort, BasePort* endPort);
    virtual ~Connection();

    // QGraphicsItem 必须实现的方法
    QRectF boundingRect() const override;
    void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) override;

    // 连接管理
    BasePort* getStartPort() const { return m_startPort; }
    BasePort* getEndPort() const { return m_endPort; }
    
    // 数据传输
    void transmitData();
    
    // 更新连接路径
    void updatePath();

protected:
    // 事件处理
    void mousePressEvent(QGraphicsSceneMouseEvent *event) override;
    void mouseReleaseEvent(QGraphicsSceneMouseEvent *event) override;

private:
    BasePort* m_startPort;  // 起始端口
    BasePort* m_endPort;    // 结束端口
    QPointF m_startPoint;   // 起始点
    QPointF m_endPoint;     // 结束点
    QPainterPath m_path;    // 连接路径
    QColor m_color;         // 连接线颜色
    qreal m_width;          // 连接线宽度
};